import axios from 'axios';
import {Notice} from 'view-ui-plus';

// 默认配置
const instance = axios.create ({
  baseURL: process.env.VUE_APP_HTTP_BASE_URL,
});
// 添加请求拦截器
instance.interceptors.request.use (
  function (config) {
    // 在发送请求之前做些什么
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject (error);
  }
);
// 添加响应拦截器
instance.interceptors.response.use (
  function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    return response;
  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject (error);
  }
);

const httpRequest = (url, data, method = 'post', showErrTip = true, other) => {
  return new Promise ((resolve, reject) => {
    instance ({
      url,
      method,
      data: method === 'get' ? null : data,
      params: method === 'get' ? data : null,
      ...other,
    })
      .then (res => {
        // TODO 适配统一返回
        if (res.data.errorCode === '00000000' || res.data.success) {
          resolve (res.data);
        } else {
          Notice.error ({
            title: '服务异常',
            // title: res.data.errorMessage || res.data.message || '服务异常',
          });
          reject ();
        }
      })
      .catch (err => {
        console.log (err);
        if (showErrTip) {
          // TODO 各项目依据自身数据结构配置此项
          // Message.error (err.message);
          Notice.error ({
            title: '服务异常',
            // title: err.message || '服务异常',
          });
        }
        reject (err);
      });
  });
};

export default httpRequest;
